Replace<S, Froms, To>
文字列S内の、Fromsを、Toに変換する
使用例
code:ts
type _ = Replace<a,b,c, 'a','b', 'x'>; // 'x,x,c' type _ = Replace<hogepiyo, 'hoge', ''>; // 'piyo' type _ = Replace<a,b,c, [], 'x'>; // 'a,b,c'
定義
code:ts
type Replace<
S extends string,
Froms extends string[],
To extends string
= Froms extends [infer H extends string, ...infer Tail extends string[]]
? Replace<Replace1<S, H, To>, Tail, To>
: S;
// prettier-ignore
type Replace1<
S extends string,
From extends string,
To extends string
= From extends '' ? S
: S extends ${infer F}${From}${infer L} ? ${F}${To}${Replace1<L, From, To>}
: S;
Replaceは、Replace1を繰り返し適用する
この書き方はv4.7からできる
v4.6以前はConditional Typesを追加で2回書かないといけなかったref しかし、引数部分で既にextendsしているのだから、理想的にはinfer...extendsも不要であって欲しいmrsekut.icon
Replace1は、FromをToに変換する
初期値がS
配列がFroms
関数がReplace1
参考
119がReplaceAllという名前なのは、別にReplaceという型もあるから
↑この文脈でのReplaceは、Fromを1回だけ置換、Allの方は全て置換という意味
このノートとは名前がズレていることに注意mrsekut.icon
今見たらなんか119消えてるなmrsekut.icon